//
// Created by Leaf on 2025/8/19.
//

#ifndef BUZZER_H
#define BUZZER_H

#include <Arduino.h>

// 蜂鸣器类型枚举
enum BuzzerType {
    ACTIVE_BUZZER,   // 有源蜂鸣器
    PASSIVE_BUZZER   // 无源蜂鸣器
};

// 蜂鸣器控制类
class Buzzer {
private:
    uint8_t buzzer_pin;      // 蜂鸣器引脚
    BuzzerType buzzer_type;  // 蜂鸣器类型
    bool is_on;              // 蜂鸣器当前状态

public:
    // 构造函数，支持指定蜂鸣器类型（默认为有源蜂鸣器）
    explicit Buzzer(uint8_t pin, BuzzerType type = ACTIVE_BUZZER);
    
    // 打开蜂鸣器
    void on();
    
    // 关闭蜂鸣器
    void off();
    
    // 切换蜂鸣器状态
    void toggle();
    
    // 播放指定频率的声音（仅适用于无源蜂鸣器）
    void playTone(uint16_t frequency, uint32_t duration = 0);
    
    // 停止播放声音
    void stopTone();
    
    // 检查蜂鸣器是否打开
    bool isOn() const;
    
    // 获取蜂鸣器类型
    BuzzerType getType() const;
};

#endif //BUZZER_H